#include <iostream>
#include <unistd.h>
#include "ShareMemory.hpp"
#include <string.h>
#include "Time.hpp"
#include "Fifo.hpp"

int main()
{
    // 创建
    shm.CreateShm();
    // 挂接
    shm.AttachShm();
    //获取属性信息
    shm.ShmMeta();
    // 去关联
    shm.DetachShm();
    // 删除
    shm.DeleteShm();
    return 0;
}

// int main()
// {
//     // 创建
//     shm.CreateShm();
//     // 挂接
//     shm.AttachShm();

//     gpipe.OpenPipeForRead();
//     // IPC 读

//     // 1.传单个字符
//     // char*strinfo = (char*)shm.GetAddr();
//     // printf("server 虚拟地址：%p\n",strinfo);
//     // while(true)
//     // {
//     //     printf("%s\n",strinfo);
//     //     sleep(1);
//     // }

//     // 2.传结构体
//     struct data *image= (struct data *)shm.GetAddr();

//     while (true)
//     {
//         gpipe.Wait();
//         printf("status: %s\n", image->status);
//         printf("lasttime: %s\n", image->lasttime);
//         printf("image: %s\n", image->image);
//         strcpy(image->status,"过期");
//     }
//     // 去关联
//     shm.DetachShm();
//     // 删除
//     shm.DeleteShm();
//     return 0;
// }

// int main()
// {

//     // 1. 创建Key
//     key_t k = ::ftok(gpath.c_str(), gprojId);
//     if (k < 0)
//     {
//         std::cerr << "ftok error" << std::endl;
//         return -1;
//     }

//     // 2. 创建共享内存 && 获取
//     // 注意：共享内存也有权限，
//     int shmid = ::shmget(k, gshmsize, IPC_CREAT | IPC_EXCL | gmode);
//     if (shmid < 0)
//     {
//         std::cerr << "shmget error" << std::endl;
//         return -2;
//     }
//     std::cout << "shmid: " << shmid << std::endl;
//     return shmid;

//     sleep(5);

//     // 3.共享内存挂到自己的地址空间中
//     void *ret = shmat(shmid, nullptr, 0);
//     std::cout << "Server 挂接成功" << (long long)ret << std::endl;
//     sleep(5);

//     // 4.通信

//     // 5.去关联
//     ::shmdt(ret);
//     std::cout << "去关联" << std::endl;

//     // n. 删除共享内存
//     shmctl(shmid, IPC_RMID, nullptr);
//     std::cout << "共享内存删除成功" << std::endl;
//     sleep(5);

//     return 0;
// }